'''
  PBM 单色图片是一种纯文本的图片格式，用于存储黑白图像。它的文件头包含图片的尺寸信息和图片类型（P1 或 P4），后面是一个二进制矩阵，表示图片的像素。
  由于FrameBuf的单色输出不支持取反显示，在节省算力的考虑下只好对显示图片提前处理
  此脚本用于将单色图取反，替换原本的文件即可
'''
# 读取 PBM 单色图片文件
img_path = "../tem_img/hard.pbm"
out_path = "../tem_img/output.pbm"

with open(img_path, "rb") as f:
  # 读取文件头
  header = f.readline()
  # 解析图片尺寸信息
  wh = f.readline()
  width, height = map(int, wh.split())
  print(width,height)
  # 读取二进制矩阵
  matrix = []
  for _ in range(height):
    row = f.readline()
    matrix.append([~int(x)+256 for x in row])
print(len(matrix))
# 将每个像素按位取反
inverted_matrix = [[x.to_bytes(length=1, byteorder='little', signed=False) for x in row] for row in matrix]
print(matrix)
print(inverted_matrix)
# 将处理后的矩阵写入新的 PBM 单色图片文件
with open(out_path, "wb") as f:
  # 写入文件头
  f.write(header)
  # 写入图片尺寸信息
  f.write(wh)
  # 写入二进制矩阵
  for row in inverted_matrix:
    for item in row:
      f.write(item)